//package work.rightAnswer;
//
//import java.util.*;
//
//class Solution {
//    public int ladderLength(String beginWord, String endWord, List<String> wordList) {
//        //连接问题：可以用图
//        Graph graph = new Graph();
//        HashMap<String,Node> hashMap = graph.nodes;
//        List<String> list = new ArrayList<>();
//        list.add(beginWord);
//        list.addAll(wordList);
//
//        if(!list.contains(endWord)){
//            return 0;
//        }
//        //两层for循环，连接节点。如果两个节点只有只差一个字母，那么就连接上
//        for (int i = 0; i < list.size(); i++) {
//            for (int j = i+1; j < list.size(); j++) {
//                String str1 = list.get(i);
//                String str2 = list.get(j);
//                if(!hashMap.containsKey(str1)){
//                    hashMap.put(str1,new Node(str1));
//                }
//                if(!hashMap.containsKey(str2)){
//                    hashMap.put(str2,new Node(str2));
//                }
//                //如果两个字符串之间，仅相差一个字符
//                if(isOnlyOneWordDiff(str1,str2)){
//                    //如果节点不存在，那就创建
//
//                    Node node = hashMap.get(str1);
//                    Node node1 = hashMap.get(str2);
//
//                    node.nexts.add(node1);
//                    node1.nexts.add(node);
//                }
//            }
//        }
//
//        //层序遍历--记住，图的遍历，要哈希表
//        HashSet<Node> hashSet = new HashSet<>();
//        Queue<Node> queue = new ArrayDeque<>();
//        Node node = hashMap.get(beginWord);
//        Node endNode = hashMap.get(endWord);
//        queue.offer(node);
//        hashSet.add(node);
//
//        if(node.nexts.size()==0){
//            return 0;
//        }
//        while (!queue.isEmpty()){
//            //主节点出队
//            Node poll = queue.poll();
//            //遍历后续节点
//            for (Node next : poll.nexts) {
//                if(next==endNode){
//                    return poll.remove+1;
//                }
//                //遍历没被遍历过的节点
//                if(!hashSet.contains(next)){
//                    next.remove = poll.remove+1;
//                    queue.offer(next);
//                    hashSet.add(next);
//                }
//            }
//        }
//        return 0;
//    }
//
//
//    public boolean isOnlyOneWordDiff(String str1,String str2){
//        if(str1.length()!=str2.length()||str1.equals(str2)){
//            return false;
//        }
//
//        int count = 0;
//        for (int i = 0; i < str2.length(); i++) {
//            if(str1.charAt(i)!=str2.charAt(i)){
//                count++;
//            }
//
//            if(count>1){
//                return false;
//            }
//        }
//
//        return count==1?true:false;
//    }
//}
//
//
//class Graph{
//    HashMap<String,Node> nodes;
//    public Graph(){
//        nodes = new HashMap<>();
//    }
//}
//
//class Node{
//    String value;
//    List<Node> nexts;
//    int remove = 1;
//
//    public Node(String value) {
//        this.value = value;
//        this.nexts = new ArrayList<>();
//    }
//}